package com.mroapp.activity;

import android.content.Intent;
import android.content.res.AssetFileDescriptor;
import android.graphics.Bitmap;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.os.Bundle;
import android.os.Handler;
import android.os.Vibrator;
import android.view.SurfaceHolder;
import android.view.SurfaceHolder.Callback;
import android.view.SurfaceView;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageView;
import android.widget.TextView;

import com.google.zxing.BarcodeFormat;
import com.google.zxing.Result;
import com.mroapp.R;
import com.mroapp.base.BaseActivity;
import com.mroapp.zxing.camera.CameraManager;
import com.mroapp.zxing.decoding.CaptureActivityHandler;
import com.mroapp.zxing.decoding.InactivityTimer;
import com.mroapp.zxing.view.ViewfinderView;

import java.io.IOException;
import java.util.Vector;
/**
 * Initial the camera
 * @author Ryan.Tang
 */
public class MipcaActivityCapture extends BaseActivity implements Callback {

	private CaptureActivityHandler handler;
	private ViewfinderView viewfinderView;
	private boolean hasSurface;
	private Vector<BarcodeFormat> decodeFormats;
	private String characterSet;
	private InactivityTimer inactivityTimer;
	private MediaPlayer mediaPlayer;
	private boolean playBeep;
	private static final float BEEP_VOLUME = 0.10f;
	private boolean vibrate;
    private TextView title_bar_text;
    private ImageView input_serial;

	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_capture);
		
		CameraManager.init(getApplication());
		viewfinderView = (ViewfinderView) findViewById(R.id.viewfinder_view);
		
		ImageView mButtonBack = (ImageView) findViewById(R.id.btn_arrow_back);
		mButtonBack.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				MipcaActivityCapture.this.finish();
				overridePendingTransition(R.anim.right_in, R.anim.right_out);
				
			}
		});
        title_bar_text=(TextView)findViewById(R.id.title_bar_text);
        title_bar_text.setText("扫描设备二维码");
        input_serial=(ImageView)findViewById(R.id.input_serial);
        input_serial.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent=new Intent(MipcaActivityCapture.this,InputSerialActivity.class);
                startActivity(intent);
            }
        });
		hasSurface = false;
		inactivityTimer = new InactivityTimer(this);
	}

	@Override
	protected void onResume() {
		super.onResume();
		SurfaceView surfaceView = (SurfaceView) findViewById(R.id.preview_view);
		SurfaceHolder surfaceHolder = surfaceView.getHolder();
		if (hasSurface) {
			initCamera(surfaceHolder);
		} else {
			surfaceHolder.addCallback(this);
			surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
		}
		decodeFormats = null;
		characterSet = null;

		playBeep = true;
		AudioManager audioService = (AudioManager) getSystemService(AUDIO_SERVICE);
		if (audioService.getRingerMode() != AudioManager.RINGER_MODE_NORMAL) {
			playBeep = false;
		}
		initBeepSound();
		vibrate = true;
		
	}

	@Override
	protected void onPause() {
		super.onPause();
		if (handler != null) {
			handler.quitSynchronously();
			handler = null;
		}
		CameraManager.get().closeDriver();
	}

	@Override
	protected void onDestroy() {
		inactivityTimer.shutdown();
		super.onDestroy();
	}
	/**
	 * 处理扫描结果
	 * @param result
	 * @param barcode
	 */
	public void handleDecode(Result result, Bitmap barcode) {
		inactivityTimer.onActivity();
		playBeepSoundAndVibrate();
		String resultString = result.getText();
		if (resultString !=null &&resultString.equals("")) {
			//RobyUtil.showToast(this,"扫描失败!");
			this.finish();
		}else {
//			RobyUtil.showToast(this,resultString);
			setResult(100,new Intent().putExtra("result", resultString)); 
			finish();
		}
	}
	
	private void initCamera(SurfaceHolder surfaceHolder) {
		try {
			CameraManager.get().openDriver(surfaceHolder);
		} catch (IOException ioe) {
			return;
		} catch (RuntimeException e) {
			return;
		}
		if (handler == null) {
			handler = new CaptureActivityHandler(this, decodeFormats,
					characterSet);
		}
	}

	@Override
	public void surfaceChanged(SurfaceHolder holder, int format, int width,
			int height) {

	}

	@Override
	public void surfaceCreated(SurfaceHolder holder) {
		if (!hasSurface) {
			hasSurface = true;
			initCamera(holder);
		}

	}

	@Override
	public void surfaceDestroyed(SurfaceHolder holder) {
		hasSurface = false;

	}

	public ViewfinderView getViewfinderView() {
		return viewfinderView;
	}

	public Handler getHandler() {
		return handler;
	}

	public void drawViewfinder() {
		viewfinderView.drawViewfinder();

	}

	private void initBeepSound() {
		if (playBeep && mediaPlayer == null) {
			// The volume on STREAM_SYSTEM is not adjustable, and users found it
			// too loud,
			// so we now play on the music stream.
			setVolumeControlStream(AudioManager.STREAM_MUSIC);
			mediaPlayer = new MediaPlayer();
			mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
			mediaPlayer.setOnCompletionListener(beepListener);

			AssetFileDescriptor file = getResources().openRawResourceFd(R.raw.beep);
			try {
				mediaPlayer.setDataSource(file.getFileDescriptor(),
						file.getStartOffset(), file.getLength());
				file.close();
				mediaPlayer.setVolume(BEEP_VOLUME, BEEP_VOLUME);
				mediaPlayer.prepare();
			} catch (IOException e) {
				mediaPlayer = null;
			}
		}
	}

	private static final long VIBRATE_DURATION = 200L;

	private void playBeepSoundAndVibrate() {
		if (playBeep && mediaPlayer != null) {
			mediaPlayer.start();
		}
		if (vibrate) {
			Vibrator vibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE);
			vibrator.vibrate(VIBRATE_DURATION);
		}
	}

	/**
	 * When the beep has finished playing, rewind to queue up another one.
	 */
	private final OnCompletionListener beepListener = new OnCompletionListener() {
		public void onCompletion(MediaPlayer mediaPlayer) {
			mediaPlayer.seekTo(0);
		}
	};

//	private void Sweep_Licenses(String m_uuid){
//		BaseRequestHttpClient client = new BaseRequestHttpClient();
//		UserInfo userInfo = SharedPreferencesUtils.getArrayValue(MipcaActivityCapture.this,
//				SharedPreferencesUtils.NAME_USER_INFO);
//		String url = NewFusionCode.SWEEP_LICENSES+m_uuid+"/agent?private_token="+userInfo.getPrivate_token();
//		client.post(url, null, new ResponseHandler() {
//
//			@Override
//			public void onFailure(Throwable error, String content) {
//				ShowDialog.getInstance().dismiss();
//				if(content==null){
//					content="";
//				}
//				try {
////					{"error":4,"detail":"你已经被该证书关联","agent_id":null}
//					JSONObject root = new JSONObject(content);
//					String detail = JsonUtils.getString(root, "detail");
//					String agent_id = JsonUtils.getString(root, "agent_id");
//					if(agent_id!=null && !agent_id.equals("null") && !agent_id.equals("")){
//						showToast(detail);
//						Intent intent = new Intent(MipcaActivityCapture.this,BusinessCardActivity.class);
//						intent.putExtra("uid", agent_id);
//						startActivity(intent);
//						overridePendingTransition(R.anim.left_in, R.anim.left_out);
////						MipcaActivityCapture.this.finish();
//					}else{
//						showToast(detail);
//					}
//					MipcaActivityCapture.this.finish();
//				} catch (JSONException e) {
//					showToast( getResources().getString(R.string.network_faild));
//					e.printStackTrace();
//				}
//			}
//
//			@Override
//			public void onSuccess(String content) {
//				super.onSuccess(content);
//				if(content == null){
//					content = "";
//				}
//				try {
//					JSONObject root = new JSONObject(content);
//					String agent_id = JsonUtils.getString(root, "agent_id");
//					String error_message=JsonUtils.getString(root, "message");
//					String msg = JsonUtils.getString(root,"detail");
//					if(msg.equals("")){
//						msg = error_message;
//					}
//					if(agent_id!=null && !agent_id.equals("null") && !agent_id.equals("")){
//
//						showToast(msg);
//						Intent intent = new Intent(MipcaActivityCapture.this,BusinessCardActivity.class);
//						intent.putExtra("uid", agent_id);
//						startActivity(intent);
//						overridePendingTransition(R.anim.left_in, R.anim.left_out);
//					}else{
//						showToast(msg);
//					}
//					MipcaActivityCapture.this.finish();
//				} catch (Exception e) {
//					// TODO: handle exception
//				}
//			}
//		});
//	}
//	/**
//	 * 粉丝添加 取消
//	 * 
//	 * @param follow
//	 */
//	private void Fans(String m_uid) {
//		UserInfo userInfo = SharedPreferencesUtils.getArrayValue(MipcaActivityCapture.this,
//				SharedPreferencesUtils.NAME_USER_INFO);
//		ShowDialog.getInstance().showActivityAnimation(getSelfActivity(), "");
//		BaseRequestHttpClient client = new BaseRequestHttpClient();
//		RequestParams params = new RequestParams();
//		params.put("private_token", userInfo.getPrivate_token());
//		params.put("follow",  "true");
//		String url = NewFusionCode.FANS + m_uid + "/follow";
//		client.post(url, params, new ResponseHandler() {
//
//			@Override
//			public void onFailure(int statusCode, Throwable error,String content) {
//				// TODO Auto-generated method stub
//				super.onFailure(statusCode,content,null,getSelfActivity());
//			}
//			@Override
//			public void onSuccess(String content) {
//				ShowDialog.getInstance().dismiss();
//				if (content == null) {
//					content = "";
//				}
//				try {
//					JSONObject root = new JSONObject(content);
//					String message  = JsonUtils.getString(root,
//							"message");
//					showToast(message);
//				} catch (JSONException e) {
//					// TODO Auto-generated catch block
//					e.printStackTrace();
//				}
//
//				super.onSuccess(content);
//
//			}
//		});
//	}
//	@Override
//	protected BaseActivity getSelfActivity() {
//		// TODO Auto-generated method stub
//		return this;
//	}
}